package main

import (
	"fmt"
	"io"
	"os"
)

/*
  I/O操作也叫输入输出操作。其中I是指Input，O是指Output，用于读或者写数据的，有些语言中也叫流操作，是指数据通信的通道

    Reader和Writer接口
       type Reader interface {
            Read(p []byte) (n int, err error)
       }

    ReaderFrom接口的定义，封装了基本的 ReadFrom 方法
    type ReaderFrom interface {
        ReadFrom(r Reader) (n int64, err error)
    }

    定义ReaderAt接口，ReaderAt 接口封装了基本的 ReadAt 方法
    type ReaderAt interface {
        ReadAt(p []byte, off int64) (n int, err error)
    }


 */
func main() {

	/*
	   读取数据：
	       Reader接口：
	           Read(p []byte)(n int, error)
	*/

	//step1：打开文件
	fileName := "/Users/chukun/work/other/a.txt"
	file, err := os.Open(fileName)
	if err!=nil {
		fmt.Println("err:",err)
		return
	}
	//step3：关闭文件
	defer file.Close()

	 bs :=make([] byte, 4, 4)

	// file, err = file.Read(bs)
	// fmt.Println(err)
	// fmt.Println(file) //4
	// fmt.Println(bs) //[97 98 99 100]
	// fmt.Println(string(bs)) //abcd

	read := -1
	for{
		read,err = file.Read(bs)
		if read == 0 || err == io.EOF{
			fmt.Println("读取到了文件的末尾，结束读取操作。。")
			break
		}
		fmt.Println(string(bs[:read]))
	}


}
